//
//  ZMSpeedy.h
//  FM_Project
//
//  Created by chenzm on 2019/8/7.
//  Copyright © 2019 DL. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>



//动画格式
//涟漪
static NSString *zm_animat_type_rippleEffect = @"rippleEffect";
//淡出
static NSString *zm_animat_type_fade = @"fade";
//移入
static NSString *zm_animat_type_moveIn = @"moveIn";
//推进
static NSString *zm_animat_type_push = @"push";
//揭开
static NSString *zm_animat_type_reveal = @"reveal";
//立体旋转
static NSString *zm_animat_type_cube = @"cube";
//上下翻转效果
static NSString *zm_animat_type_oglFlip = @"oglFlip";
//收缩效果，如一块布被抽走
static NSString *zm_animat_type_suckEffect = @"suckEffect";


//动画方向
static NSString *zm_animat_subtype_fLeft = @"fromLeft";
static NSString *zm_animat_subtype_fRight = @"fromRight";
static NSString *zm_animat_subtype_fTop = @"fromTop";
static NSString *zm_animat_subtype_fBottom = @"fromBottom";



@interface ZMSpeedy : NSObject
/**
 设置按钮的圆角
 
 @param anyControl 控件
 @param radius 圆角度
 @param width 边宽度
 @param borderColor 边线颜色
 @param can 是否裁剪
 @return 控件
 */
+(id)zm_changeControl:(UIView *)anyControl cornerRadius:(NSInteger)radius borderWidth:(NSInteger)width borderColor:(UIColor *)borderColor mask:(BOOL)can;


/**
 贝塞尔曲线设置圆角【UIRectCornerTopLeft、Right】
 
 @param anyControl 控件
 @param corners 圆角位置
 @param radius 圆角尺寸
 */
+ (void)zm_changeControl:(UIView *)anyControl bezierCorner:(UIRectCorner)corners radius:(CGSize)radius;

///添加边框
+ (void)zm_setBorderWithView:(UIView *)view top:(BOOL)top left:(BOOL)left bottom:(BOOL)bottom right:(BOOL)right borderColor:(UIColor *)color borderWidth:(CGFloat)width;


/**
 选取部分数据变色（label）
 
 @param label label
 @param arrray 变色数组
 @param color 变色颜色
 @return label
 */
+(id)zm_setSomeOneChangeColor:(UILabel *)label SetSelectArray:(NSArray *)arrray SetChangeColor:(UIColor *)color;




/**
 计算缓存数据大小
 
 @param path 文件路径
 @return 返回数据大小
 */
+ (CGFloat)folderSizeAtPath:(NSString *)path;

/**
 根据路径删除文件
 
 @param path 文件路径
 */
+(void)cleanCaches:(NSString *)path;
#pragma mark -  根据传入字体大小计算字体宽高
/// 文本尺寸
+ (CGSize)zm_calcuStrSize:(NSString *)text font: (UIFont *)font maxW:(CGFloat)maxW;

/// 富文本尺寸
+ (CGSize)zm_calcuAttStrSize:(NSAttributedString *)string maxW:(CGFloat)maxW;
/**
 利用贝塞尔曲线设置圆角
 
 @param control 按钮
 @param size 圆角尺寸
 */
+ (void)zm_setUpBezierPathCircularLayerWithControl:(UIButton *)control size:(CGSize)size;


/**
 label首行缩进
 
 @param label label
 @param emptylen 缩进比
 */
+ (void)zm_setUpLabel:(UILabel *)label Content:(NSString *)content IndentationFortheFirstLineWith:(CGFloat)emptylen;


/**
 字符串加密显示处理
 
 @param content NSString字符串
 @param findex 第几位开始加星
 @return 返回加星后的字符串
 */
+ (NSString *)zm_encryptMsg:(NSString *)content
                 startIndex:(NSInteger)findex;
/**
 格式化文本显示
 @param hisStr 要格式化的文本
 @param str 添加的内容
 @param num 添加的间隔
 @return 返回格式化的文本
 */
+(NSString *)zmFormateStr:(NSString *)hisStr
                   addStr:(NSString *)str
              intervalNum:(NSInteger)num;

/**
 取随机数
 
 @param StarNum 开始值
 @param endNum 结束值
 @return 从开始值到结束值之间的随机数
 */
+ (NSInteger)zm_GetRandomNumber:(NSInteger)StarNum to:(NSInteger)endNum;


#pragma mark - 图片转base64编码
+ (NSString *)UIImageToBase64Str:(UIImage *) image;

#pragma mark - base64图片转编码
+ (UIImage *)Base64StrToUIImage:(NSString *)_encodedImageStr;

+ (void)zm_SetUpAlterWithView:(UIViewController *)vc Message:(NSString *)message Sure:(dispatch_block_t)sureBlock Cancel:(dispatch_block_t)cancelBlock;



/**
 触动
 */
+ (void)zm_callFeedback;


/**
 获取当前控制器
 */
+ (UIViewController *)zm_getCurrentVC;

#pragma mark -- 本地缓存数据处理
/**
 获取本地缓存数据
 @param key 键值
 @return 返回值
 */
+(id)getLocalObj:(NSString *)key;

/**
 缓存数据
 @param obj 需要缓存的值
 @param key 键值
 */
+(void)saveLocalObj:(id)obj key:(NSString *)key;

/**
 删除本地缓存
 
 @param key 键值
 */
+(void)delateLocalObj:(NSString *)key;



/// 将View转化为图片
+ (UIImage*)getImageFromView:(UIView*)fview;

/**
 *  图片增加水印图片
 *
 *  @param superImage 需要增加水印的图片
 *  @param subImage   水印图片
 *  @param posRect    水印的位置 和 水印的大小
 *
 *  @return 加水印后的新图片
 */
+ (UIImage *)addImageToSuperImage:(UIImage *)superImage withSubImage:(UIImage *)subImage andSubImagePosition:(CGRect)posRect;

/**
 修改图片尺寸
 @param size 需要修改图片大小
 @param hisImage 需要修改压缩的图片
 @return 修改够的图片
 */
+ (UIImage *)imageByResizeToSize:(CGSize)size image:(UIImage *)hisImage;
/// 质量大小压缩相结合
/// @param image 要压缩的图片
/// @param maxLength 压缩的最大质量
+ (UIImage *)zm_compressSizeAndQualityImage:(UIImage *)image toByte:(NSUInteger)maxLength;

/// 质量大小压缩相结合【返回Data】
/// @param image 要压缩的图片
/// @param maxLength 压缩的最大质量
+(NSData *)zm_getImgData:(UIImage *)image toByte:(NSUInteger)maxLength;

/// 将UIImage转换为NSData
+ (NSData*)zm_dataFromImage:(UIImage*)image;

/// 判断是否开启定位
+(BOOL)zm_judgeIsAppOpensTheLocation;


#pragma mark --【时间】转换与计算
/**
 时间戳（LL）转nsdate
 
 @param timeLine 时间戳
 @return 返回日期
 */
+(NSDate *)changeNSDateFromLL:(long long)timeLine;
/**
 字符串（Str）转nsdate
 
 @param dateStr 字符村
 @return 返回date
 */
+(NSDate *)changeNSDateFromStr:(NSString *)dateStr;

/**
 NSDate类型转LL类型
 
 @param date 日期
 @return 返回LL类型
 */
+(long long)changeLLFromDate:(NSDate *)date;

/**
 字符串（Str）转换成LL
 
 @param theTime 字符串时间
 @param format 格式,空为默认
 @return 返回时间戳
 */
+(long long)changeLLFromString:(NSString *)theTime format:(NSString *)format;

/**
 将NSDate转成字符串（Str）
 
 @param date 日期
 @param dateFormat 转化格式
 @return 返回字符串时间
 */
+(NSString *)changeStrFromDate:(NSDate *)date dateFormat:(NSString *)dateFormat;

/**
 将LongLong转成字符串（Str）
 
 @param dateLon 日期
 @param dateFormat 转化格式
 @return 返回字符串时间
 */
+(NSString *)changeStrFromLL:(long long)dateLon dateFormat:(NSString *)dateFormat;

/**
 将NSDate时间转成字符串时间(yy年MM月dd日 HH:mm)
 
 @param date 日期
 @return 返回字符串时间
 */
+(NSString *)getYYMMDDHHMMStrTimeFromDate:(NSDate *)date;
/**
 将NSDate时间转成字符串时间(MM月dd日 HH:mm)
 
 @param date 日期
 @return 返回字符串时间
 */
+(NSString *)getMMDDHHMMStrTimeFromDate:(NSDate *)date;

/**
 根据提供时间计算距离现在多长时间
 
 @param compareDate 提供时间
 @return 返回字符串显示自检
 */
+(NSString *) compareCurrentTime:(NSDate*) compareDate;

#pragma mark -
#pragma mark - CAKeyframeAnimation动画
/**
 点击缩放动画
 @pragram layer:【添加对象】
 */
+(void)zm_animationClickByScale:(CALayer *)layer;

/**
 点击动画效果
 @pragram layer:【添加对象】
 @pragram type:【格式】 rippleEffect(涟漪)，fade（淡出）,moveIn（移入）,push（推进），reveal（揭开）,cube(立体旋转)
 @pragram subType:【动画方向】fromLeft,fromRight,fromTop，fromBottom
 @pragram duration:持续时间[<0取默认时间1秒]
 */
+(void)zm_animationWithLayer:(CALayer *)layer type:(NSString *)type subType:(NSString *)subType duraton:(CFTimeInterval)duration key:(NSString *)key;

///添加视图动画【慢慢放大】
+(void)zm_showViewByAnimationWithLayer:(CALayer *)layer duraton:(CFTimeInterval)duration;
///添加视图动画【慢慢最大 缩小 还原】
+(void)zm_showViewByAnimation_BMR_WithLayer:(CALayer *)layer duraton:(CFTimeInterval)duration;
///添加视图动画【自定义】
+(void)zm_showAnimationWithLayer:(CALayer *)layer duraton:(CFTimeInterval)duration scaleA:(CGFloat)scaleA scaleB:(CGFloat)scaleB;
///移除页面的动画【慢慢淡出】
+(void)zm_removeViewByAnimationWithView:(UIView *)view duraton:(CFTimeInterval)duration;

#pragma mark -
#pragma mark - 富文本

/**
添加中划线富文本
@param text 文本
@param color 颜色
@param font 字体大小
*/
+(NSMutableAttributedString *)zm_richText_centerLineText:(NSString *)text font:(UIFont *)font color:(UIColor *)color;

/**
 富文本
 @param Str 文本
 @param color 颜色
 @param font 字体大小
 */
+(NSMutableAttributedString *)zm_richText_text:(NSString *)Str color:(UIColor *)color font:(UIFont *)font;
/**
 富文本 【图文】
 
 @param str 字符串
 @param image 图标
 @param color 字体颜色
 @param font 字体大小
 @param position 图标的位置 1、图标在文本前面 2、图标在文本后面
 */
+(NSMutableAttributedString *)zm_richImgText_text:(NSString *)str image:(UIImage *)image textColor:(UIColor *)color font:(UIFont *)font imgPosition:(NSUInteger)position;

/**
 富文本 【图片】
 @param image 图片
 @param font 图片适应字体的大小
 @param alignment 垂直方向的位置
 @return 属性文本
 */
+(NSMutableAttributedString *)zm_richYYLblImage_Img:(UIImage *)image alignToFont:(UIFont *)font verticalAlignment:(YYTextVerticalAlignment)alignment;
/**
 富文本 【UILabel图片】
 @param img 图片
 @param offset 偏移量
 */
+(NSMutableAttributedString *)zm_richLblImg_Img:(UIImage *)img offset:(CGPoint)offset;

/**
 根据颜色生成imgage
 @param color 颜色
 */
+ (UIImage *)zm_createImageWithColor:(UIColor *)color;
#pragma mark-
#pragma mark- 表格刷新
//刷新某个组元
+(void)refreshCell:(UITableView *)tableView indexPath:(NSIndexPath *)indexPath;

//刷新某个单元格
+(void)refreshCell:(UITableView *)tableView row:(NSInteger)row section:(NSInteger)section;

//刷新某组单元格
+(void)refreshSection:(UITableView *)tableView section:(NSInteger)section;

#pragma mark-
#pragma mark- 判断

/** 判断是否【数字和字母组成】 */
+ (BOOL)validateArabNumOrLetter:(NSString *)str;

/** 判断手机号码【只判断位数】 */
+ (BOOL)validateMoblieNum:(NSString *)mobileNum;
/**
 判断某个字符是否属于设置字符串
 
 @param str 字符
 @param toStr 字符串
 */
+ (BOOL)validateStr:(NSString*)str belongToStr:(NSString *)toStr;
/**
 键盘验证是否是阿拉伯数字，是则显示不是就过滤
 @param number 判断的自渡船
 @return 返回是否是阿拉伯数字
 */
//在该方法中实现：-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
+ (BOOL)validateNumber:(NSString*)number;

/**
 键盘验证是否是阿拉伯数字和+字符，是则显示不是就过滤
 @param number 判断的自渡船
 @return 返回是否是阿拉伯数字
 */
+ (BOOL)validateArabNumOrAddSymbol:(NSString*)number;

/**
 验证是否是身份证
 @param string 身份证号码
 @return 返回是否是身份证号码
 */
+ (BOOL)validateIdentityCard:(NSString *)identityCard;

/**
 * 银行卡号格式化和长度限制
 */
+(BOOL)bankCardNumLayoutAndLengthLimit:(UITextField *)textField inRange:(NSRange)range replacementString:(NSString *)string endBlock:(void (^)(NSString *newStr))compeleteBlock;


/**
 * 身份证格式化和长度限制 无空格
 */
+(BOOL)idcardNumLengthLimit:(UITextField *)textField inRange:(NSRange)range replacementString:(NSString *)string endBlock:(void (^)(NSString *newStr))compeleteBlock;

/**
 * 身份证格式化和长度限制
 */
+(BOOL)idCardLayoutAndLengthLimit:(UITextField *)textField replacementString:(NSString *)string;

#pragma mark - 多线程

///主线程
+(void)GCDMainQueue:(void(^)(void))queue;
///子线程
+(void)GCDGlobalQueue:(void(^)(void))queue;
///延迟线程
+(void)GCDAfter:(dispatch_time_t)time queueBlock:(void(^)(void))queue;
+(void)GCDMultiQueue:(void(^)(void))queue;

+ (void)GCDInLineQueue:(void(^)(void))queue;

#pragma mark-
#pragma mark- 系统小功能
/// 拨打电话
+(void)callWithPhone:(NSString *)phone;

/**
 过滤字符串中的空白字符（\t \n \r）
 
 @param string 要过滤的字符串
 @return 过滤后的字符串
 */
+ (NSString *)filterBlankSpaceChatater:(NSString *)string;

/**
 过滤小数点【设置版本号使用】（.）
 @param string 要过滤的字符串
 @return 过滤后的字符串
 */
+ (NSString *)filterDecimalPointChatater:(NSString *)string;

/// HTML适配图片文字
+ (NSString *)zm_adaptWebViewForHtml:(NSString *)htmlStr;

// 获取项目图片资源
+ (UIImage *)imageWithFile:(NSString *)url;

/// 根据图片url获取图片尺寸
+(CGSize)getImageSizeWithURL:(id)imageURL;


/// 获取拼音首字母(传入汉字字符串, 返回大写拼音首字母)
+ (NSString *)zm_firstCharactor:(NSString *)aString;

#pragma mark - 自适应字体
/**
 根据字符串高度返回宽度
 
 @param font 字号
 @param text 输入的字符串
 @param height 要的高度
 @return 返回的宽度
 */
+(CGFloat)returnStringWidthWithFont:(UIFont * )font Text:(NSString *)text With:(CGFloat)height;


/**
 根据字符串宽度返回高度(CGFloat)
 
 @param font 字号
 @param text 输入的字符串
 @param width 要的宽度
 @return 返回的高度
 */
+ (CGFloat )returnStringHeightWithFont:(UIFont * )font Text:(NSString *)text MaxWidth:(CGFloat)width;

/**
 给一个view画虚线
 
 @param view 父view
 */
+ (void)drawDottedLine:(UIView *)view color:(UIColor *)color;


/**
 添加四边阴影效果

 @param theView theView description
 @param theColor theColor description
 */
+ (void)addShadowToView:(UIView *)theView withColor:(UIColor *)theColor;

/**
 * 获取字符串的字节长度  汉字：两个字节 数字和英文字母：一个字节
 */
+(NSUInteger)zm_asciiLengthOfString: (NSString *) text;



/**
 转换HTML文本
 */
+ (NSAttributedString *)converteAttributedStringWithStr:(NSString *)str;

/**
 秒数转换成小时和分钟用于详情页的倒计时
 
 @param seconds 秒数
 @return 转换成小时、分钟
 */
+ (NSString *)convertedHourAndMinutesAndSecondsWithSeconds:(NSInteger)seconds;

@end

